#include <iostream>
#include <fstream>
#include "CompresorEstructurado"
#include "ArchivoXML.h"

using namespace std;

void comprimirEstaSalidaDeMtf(const std::string& mtfOutFileName,const std::string& compressToFileName ,const int estimatedSize)
{
	uchar mtfOut[estimatedSize];
    bool erroresArchivo;
    char caracterInicio = ',';
    int i =0;
    int actual;


    ArchivoXML miArchivo(mtfOutFileName, erroresArchivo);
    if (!erroresArchivo)
    {
        std::string dato,dato_anterior="";
        miArchivo.irAlPrincipio();

        while(miArchivo.leerHastaCaracter(caracterInicio,dato_anterior))
            {
                dato = miArchivo.Trim(dato_anterior);
                actual = atoi( dato.c_str() );
                if (actual == 999)
                    break;
                mtfOut[i] = actual;
                i++;

            }
		cout<<"Nros leidos:"<<i<<endl;
//
//		cout<<"Verificacion:"<<endl;
//		for (int j =0;j<i;j++){
//			cout<<(int)mtfStdOutPaper5[j]<<" , " ;
//			if (j%50 ==0)
//			{
//			    cout<<endl;
//			    cout<<"Enter para continuar.."<<endl;
//			    getchar();
//			}
//		}

    }

	ofstream osStd(compressToFileName);
	obitstream bitwiseFile(&osStd);

	CompresorEstructurado compEst(&bitwiseFile);

	compEst.comprimirBloque(mtfOut, i);

	compEst.finalizar();
	bitwiseFile.pad();
	osStd.close();

}

int main() {
    //parte 1: comprimo el paper5  de la ccc con un mtf std
    comprimirEstaSalidaDeMtf("mtfAltOutATxt.txt","mtfAltOutATxtZipped.txt",32000);
    //--> comprimido 4920 bytes

    //parte 2: comprimo el paper5  de la ccc con un mtf alternativo
    comprimirEstaSalidaDeMtf("mtfStdATxt.txt","mtfStdAtxtZipped.txt",32000);

    //parte 3: comprimo el paper1  de la ccc con un mtf std
    //comprimirEstaSalidaDeMtf("mtfStdOutPaper1.txt","mtfStdOutP1Zipped.txt",21500);
    //--> comprimido 4920 bytes

    //parte 4: comprimo el paper1  de la ccc con un mtf alternativo
    //comprimirEstaSalidaDeMtf("mtfAltOutPaper1.txt","mtfAltOutP1Zipped.txt",27500);

	return 0;
}
